/**
 * 函数组合
 * @export
 * @param {*} func
 * @return {*} 
 */
export default function compose(...func) {
    // 特殊处理
    if (func.length === 0) return arg => arg
    if (func.length === 1) return func[0]

    return func.reduce((prev, curr) => (...args) => prev(curr(...args)))

    // return function (...params) {
    //     let lastReturn = params; //记录上一个函数返回的值，它将作为下一个函数的参数
    //     func.reverse().forEach((fun, i) => {
    //         const par = i === 0 ? lastReturn : [lastReturn]
    //         lastReturn = fun(...par)
    //     })
    //     return lastReturn
    // }
}

const fun1 = n => n * 2
const fun2 = n => n + 2

const func = compose(fun1, fun2)
console.log(func(3));